﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Gerencial_Fisio_Nutry.Tela
{
    public partial class Pagamento : Form
    {
        #region variaveis
        public Logica.VendaObj venda;
        public string[] textoParcelas;
        public bool encerrou;
        int qtdParcela;
        public double entrada;
        #endregion variaveis
        public Pagamento(Logica.VendaObj venda)
        {
            this.venda = venda;
            venda.valorDescontoEspecial = 0;
            InitializeComponent();
            rVista_CheckedChanged(null, null);
        }     
        private void rCliente_CheckedChanged(object sender, EventArgs e)
        {
            if (rCliente.Checked) gCliente.Visible = true;

            venda.valorDescontoEspecial = 0;
            tbEntrada_KeyPress(sender, new KeyPressEventArgs('\r'));
            cParcela.Visible = false;
            rVista_CheckedChanged(null, null);
        }
        private void rRevendedor_CheckedChanged(object sender, EventArgs e)
        {
            gCliente.Visible = true;
        }
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            gCliente.Visible = false;
            tbEntrada_KeyPress(sender, new KeyPressEventArgs('\r'));
            cParcela.Visible = false;
            rVista_CheckedChanged(null, null);
        }
        public void prencheParcela(int qtdParcela,double valor)
        {
            textoParcelas = new string[qtdParcela];
            for (int i = 0; i < textoParcelas.Length; i++)
                textoParcelas[i] = (i+1)+"x de "+(valor/ (i+1)).ToString("0.00");
            cParcela.DataSource = textoParcelas;
            cParcela.SelectedIndex = 0;
            cParcela.Visible = true;
        }   
        private void rCrédito_CheckedChanged(object sender, EventArgs e)
        {
           
            cParcela.Visible = true;
            tbEntrada.Enabled = true;
            tbValorTotal.Text = (venda.valorTotal - venda.valorDescontoEspecial).ToString("0.00");
            tbEntrada.Text = 0.ToString("0.00"); tbEntrada.Visible = true; lEntrada.Visible = true; lParcela.Visible = true;
            prencheParcela(6, (venda.valorTotal - venda.valorDescontoEspecial));


        }
        private void rDebito_CheckedChanged(object sender, EventArgs e)
        {
            tbEntrada.Text = tbValorTotal.Text = (venda.valorTotal - venda.valorDescontoEspecial).ToString("0.00");

           tbEntrada.Visible = true; lEntrada.Visible = true; tbEntrada.Enabled = false;
            cParcela.Visible = false; lParcela.Visible = false;
        }
        private void rVista_CheckedChanged(object sender, EventArgs e)
        {
            if (venda.valorDescontoEspecial == 0) lDesconto.Visible = false;
            else lDesconto.Visible = true;

            tbEntrada.Text = tbValorTotal.Text = (venda.valorTotal-venda.valorDescontoEspecial).ToString("0.00");

            tbEntrada.Visible = true; lEntrada.Visible = true; tbEntrada.Enabled = false;
            cParcela.Visible = false; lParcela.Visible = false;
           
        }
        private void rPrazo_CheckedChanged(object sender, EventArgs e)
        {
            if (!venda.temPessoa()&& rPrazo.Checked)
            {
                MessageBox.Show("Informe Um Cliente Para Prosseguir com Essa Opção");
                rVista.Checked = true;
                rVista_CheckedChanged(sender, null);
                return;
            }
            cParcela.Visible = true; lParcela.Visible = true;
            tbEntrada.Enabled = true;
            tbValorTotal.Text = (venda.valorTotal - venda.valorDescontoEspecial).ToString("0.00");
            tbEntrada.Text = 0.ToString("0.00"); tbEntrada.Visible = true; lEntrada.Visible = true;
            prencheParcela(6, (venda.valorTotal - venda.valorDescontoEspecial));
        }
      
        private void tbEntrada_KeyPress(object sender, KeyPressEventArgs e)
        {
         
            if (e.KeyChar == '\r')
            {
                entrada = double.Parse(tbEntrada.Text);
                if (entrada > venda.valorTotal) {
                    MessageBox.Show("Troco do Cliente : "+ (entrada-venda.valorTotal).ToString("0.00"));
                    entrada = venda.valorTotal;

                    rVista.Checked = true;
                    rVista_CheckedChanged(sender, null);


                    return; 
                }
                prencheParcela(6, (venda.valorTotal  - venda.valorDescontoEspecial ) - entrada);
                tbEntrada.Text = entrada.ToString("0.00");
            }
        }

        private void pPesquisaPessoa_Click(object sender, EventArgs e)
        {
            ProcuraPessoa find = new ProcuraPessoa(rCliente.Checked);
            find.ShowDialog();
            tbCodigoPessoa.Text = find.cod_pessoa.ToString("00000");
            if (find.cod_pessoa == 0) return;
            venda.pessoa = find.pessoa;
            tbCodigoPessoa_KeyPress(sender, new KeyPressEventArgs('\r'));

            if (rCliente.Checked) 
            {
                venda.pessoa.isCliente = true;
                venda.pessoa.isRevendedor = false;
            }
            else
            {
                venda.pessoa.isCliente = false;
                venda.pessoa.isRevendedor = true;
             
            }
        }   
        private void tbCodigoPessoa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                try
                {
                    ProcuraPessoa find = new ProcuraPessoa(rCliente.Checked);
                    venda.pessoa = new Banco.MetodoBanco().carregarPessoaByCodigo(int.Parse(tbCodigoPessoa.Text));
                    preencherPessoa();

                    double valorDesconto = (new Banco.MetodoBanco().descontoRevendedor(venda.pessoa.cod_pessoa) * venda.valorTotal);
                    venda.valorDescontoEspecial = valorDesconto;
                    lDesconto.Text = "Desconto Especial : R$ " + valorDesconto.ToString("0.00");
                    lDesconto.Visible = true;
                    tbEntrada_KeyPress(sender, new KeyPressEventArgs('\r'));
                    lParcela.Visible = false;
                    cParcela.Visible = false;
                    rVista_CheckedChanged(null, null);
                }
                catch {
                    tbCodigoPessoa.Text = "";
                }        
            }
        }
        public void preencherPessoa()
        {
            try
            {
                tbNome.Text = venda.pessoa.nome;
                tbEndereco.Text = venda.pessoa.endereço;
                tbNumero.Text = venda.pessoa.numero;
                tbTelefone.Text = venda.pessoa.telefone;
                tbDataCadastro.Text = venda.pessoa.dataCadastro.ToShortDateString();
                tbCidade.Text = venda.pessoa.cidade;
                tbEstado.Text = venda.pessoa.UF;
               
            }
            catch { }
        }

        private void bBack_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btConfirmar_Click(object sender, EventArgs e)
        {
            if (podeEncerrar())
            {
                for (int i = 0; i < venda.itens.Count;i++ )
                    if(!new Banco.MetodoBanco().estoqueAutorizado(venda.itens[i].produto.cod_Produto,venda.itens[i].quantidadeItem))
                    {
                        encerrou = false;
                    this.Close();

                    }
               
                    new Banco.MetodoBanco().encerrarVenda(venda);//jogo a venda completa com pagamento, cliente
                     new Banco.MetodoBanco().preencheVariaveisDoDia();
                    encerrou = true;
                this.Close();// se pode encerrar aqui eu alimento alguma coisa no banco...

            }
        }
        public bool podeEncerrar()
        {
           
                if (rCliente.Checked)
                {
                    venda.pessoa.isCliente = true;
                    venda.pessoa.isRevendedor = false;
                }
                else
                {
                    if (rRevendedor.Checked)
                    {
                        venda.pessoa.isCliente = false;
                        venda.pessoa.isRevendedor = true;
                    }
                    else
                    {
                        venda.pessoa.isCliente = false;
                        venda.pessoa.isRevendedor = false;

                    }
                }
                if (rVista.Checked)
                {
                    venda.pagamento = new Logica.Pagamento[1];
                    venda.pagamento[0] = pagamentoAvista(venda.valorTotal-venda.valorDescontoEspecial, 1,"A vista");
                }
                else 
                if (rDebito.Checked)
                {
                    venda.pagamento = new Logica.Pagamento[1];
                    venda.pagamento[0] = pagamentoAvista(venda.valorTotal - venda.valorDescontoEspecial, 3, "Debito");
                }else
                if (rCrédito.Checked)
                    #region credito
                    if (entrada > 0)
                    {
                        venda.pagamento = new Logica.Pagamento[qtdParcela + 1];
                        venda.pagamento[0] = pagamentoAvista(double.Parse(tbEntrada.Text)-venda.valorDescontoEspecial, 2, "Entrada");
                        for (int i = 1; i < qtdParcela+1; i++)
                            venda.pagamento[i] = pagamentoParcelado
                                ((i + 1), (((venda.valorTotal-venda.valorDescontoEspecial) - double.Parse(tbEntrada.Text)) / qtdParcela), 2, ("Parcela " + i  + " de " + qtdParcela)
                                , new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).Date.AddMonths(i ));
                       
                    }
                    else
                    {
                        venda.pagamento = new Logica.Pagamento[qtdParcela];
                        for (int i = 0; i < qtdParcela; i++)
                            venda.pagamento[i] = pagamentoParcelado
                                ((i + 1), ((venda.valorTotal-venda.valorDescontoEspecial) / qtdParcela), 2,( "Parcela " + (i + 1) + " de "+ qtdParcela)
                                , new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day).Date.AddMonths(i+1));
                    }
                    #endregion
                else if (rPrazo.Checked)
                {
                    #region Prazo
                    if (entrada > 0)
                    {
                        venda.pagamento = new Logica.Pagamento[qtdParcela + 1];
                        venda.pagamento[0] = pagamentoAvista(double.Parse(tbEntrada.Text)-venda.valorDescontoEspecial, 4, "Entrada");
                        for (int i = 1; i < qtdParcela + 1; i++)
                            venda.pagamento[i] = pagamentoParcelado
                                ((i + 1), (((venda.valorTotal-venda.valorDescontoEspecial) - double.Parse(tbEntrada.Text)) / qtdParcela),4, ("Parcela " + i + " de " + qtdParcela)
                                , new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).Date.AddMonths(i));

                    }
                    else
                    {
                        venda.pagamento = new Logica.Pagamento[qtdParcela];
                        for (int i = 0; i < qtdParcela; i++)
                            venda.pagamento[i] = pagamentoParcelado
                                ((i + 1), ((venda.valorTotal-venda.valorDescontoEspecial) / qtdParcela), 2, ("Parcela " + (i + 1) + " de " + qtdParcela)
                                , new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).Date.AddMonths(i + 1));
                    }
                    #endregion
                }
                AnuncioValores anun = new AnuncioValores(venda);
                anun.ShowDialog();
                encerrou = anun.confirmado;
                if (!encerrou) return false;
                return true;
        

        }
        private Logica.Pagamento pagamentoAvista( double valor, int tipoPagamento , string descricao)
        {

            Logica.Pagamento pag = new Logica.Pagamento();
            pag.valorPagamento = valor;
            pag.cod_pagamento = 1;
            pag.dataPagamento = DateTime.Now;
            pag.dataPrevista = DateTime.Now;
            pag.descricao = descricao;
            pag.isAvista = true;
            pag.isPago = true;
            pag.tipoPagamento = tipoPagamento;
            return pag;

        }
        private Logica.Pagamento pagamentoParcelado(int cod_pagamento, double valor, int tipoPagamento, string descricao, DateTime dataPrevista)
        {
            Logica.Pagamento pag = new Logica.Pagamento();
            pag.valorPagamento = valor;
            pag.cod_pagamento = cod_pagamento;
            
            pag.dataPrevista = dataPrevista;
            pag.descricao = descricao;
            pag.isAvista = false;
            pag.isPago = false;
            pag.tipoPagamento = tipoPagamento;
            return pag;

        }
      
        private void cParcela_SelectedIndexChanged(object sender, EventArgs e)
        {
            qtdParcela = int.Parse(cParcela.SelectedItem.ToString().Split('x')[0]);
        }
     
    }
}
